package net.jgrm.redisadvanced.service;

import java.util.concurrent.TimeUnit;

/**
 * Redis HyperLogLog类型操作服务接口
 * 提供基数统计相关的操作方法
 */
public interface RedisHyperLogLogService {

    /**
     * 添加元素到HyperLogLog
     *
     * @param key    键名
     * @param values 要添加的元素
     * @return 基数是否发生变化
     */
    Long add(String key, Object... values);

    /**
     * 获取HyperLogLog的基数估计值
     *
     * @param keys 键名列表
     * @return 基数估计值
     */
    Long size(String... keys);

    /**
     * 合并多个HyperLogLog到一个新的HyperLogLog
     *
     * @param destination 目标键名
     * @param sourceKeys  源键名列表
     * @return 是否合并成功
     */
    Long merge(String destination, String... sourceKeys);

    /**
     * 删除HyperLogLog
     *
     * @param key 键名
     * @return 是否删除成功
     */
    Boolean delete(String key);

    /**
     * 设置过期时间
     *
     * @param key        键名
     * @param expireTime 过期时间
     * @param timeUnit   时间单位
     * @return 是否设置成功
     */
    Boolean expire(String key, long expireTime, TimeUnit timeUnit);

}